//验证回文串
//给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
//
// 说明：本题中，我们将空字符串定义为有效的回文串。
//
//
//
// 示例 1:
//
//
//输入: "A man, a plan, a canal: Panama"
//输出: true
//解释："amanaplanacanalpanama" 是回文串
//
//
// 示例 2:
//
//
//输入: "race a car"
//输出: false
//解释："raceacar" 不是回文串
//
//
//
//
// 提示：
//
//
// 1 <= s.length <= 2 * 105
// 字符串 s 由 ASCII 字符组成
//
// Related Topics 双指针 字符串
// 👍 513 👎 0

import java.util.ArrayList;
import java.util.List;

public class IsPalindrome {
    public static void main(String[] args) {
        String s=" ";
        System.out.println(isPalindrome1(s));
    }
    public static boolean isPalindrome(String s) {
        if (s==null)
            return true;

        s=s.toLowerCase();
        char[] slist=s.toCharArray();
        List<Character> newstr= new ArrayList<Character>();
        for (int i = 0; i <slist.length ; i++) {
            char c=slist[i];
            if ((c>='a'&&c<='z')||(c>='0'&&c<='9')){
                newstr.add(c);
            }
        }
        if (newstr.size()==0){
            return true;
        }
        for (int i = 0; i < newstr.size(); i++) {
                if (newstr.get(i).charValue()!=newstr.get(newstr.size()-i-1).charValue()){
                    return false;
                }

        }
        return true;
    }

    public static boolean isPalindrome1(String s) {
        if (s==null||"".equals(s))
            return true;
        char[] sc=s.toLowerCase().toCharArray();
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i <sc.length ; i++) {
            if ((sc[i]>='a'&&sc[i]<='z')||(sc[i]>='A'&&sc[i]<='Z')||(sc[i]>='0'&&sc[i]<='9')){
                sb.append(sc[i]);
            }
        }
        char[] nsc=sb.toString().toCharArray();
        if (nsc.length==0){
            return true;
        }
        for (int i = 0; i <(nsc.length/2+1) ; i++) {
            if (nsc[i]!=nsc[nsc.length-i-1]){
                return false;
            }
        }
        return true;

    }
}
